﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HotelSoft.HotelManagement_BUS;
using System.Collections;
using HotelSoft.HotelManagement_DTO;

namespace HotelSoft.HotelManagement_GUI
{
    public partial class frmQuanly_HOADONTHANHTOAN : Form
    {
        // Define the CS_DROPSHADOW constant
        private const int CS_DROPSHADOW = 0x00020000;

        // Override the CreateParams property
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ClassStyle |= CS_DROPSHADOW;
                return cp;
            }
        }
        Double temp = 1;
        public bool bNhapDung = false;
        public int iCo = 0;
        ArrayList dsHoaDon_ThanhToan;//danh sach hoa don thanh toan dang co cua khach san
        HoaDon_ThanhToanBUS busHoaDon_ThanhToan = new HoaDon_ThanhToanBUS();//Đối tượng chứa các hàm xử lý nghiệp vụ liên quan tới Hoa Don Thanh Toan
        BindingSource bsData = null;
        PhieuDangKyBUS busPhieuDangKy = new PhieuDangKyBUS();
        NhanVienBUS busNhanVien = new NhanVienBUS();
        HoaDon_ThanhToanBUS busHoaDonThanhToan = new HoaDon_ThanhToanBUS();
        HoaDon_ThanhToanDTO dtoHoaDon_ThanhToan = new HoaDon_ThanhToanDTO();
        frmTRAPHONG_Commit frm;
        private DateTime ngayTT;
        private static float tongtien;
        private static string SoPDKs;
        private static string SoHDs;
        private static string SoPhongs;
        private static string Ngaythue;
        private static string Songaythue;

        public string SONGAYTHUE
        {
            get { return Songaythue; }
            set { Songaythue = value; }
        }
        public string NGAYTHUE
        {
            get { return Ngaythue; }
            set { Ngaythue = value; }
        }

        public string SOphong
        {
            get { return SoPhongs; }
            set { SoPhongs = value; }
        }

        public string SOhd
        {
            get { return SoHDs; }
            set { SoHDs = value; }
        }


        public string SOpdk
        {
            get { return SoPDKs; }
            set { SoPDKs = value; }
        }


        public float TONGTIEN
        {
            get { return tongtien; }
            set { tongtien = value; }
        }

        public frmQuanly_HOADONTHANHTOAN()
        {
            InitializeComponent();
        }

        private void frmQuanly_HOADONTHANHTOAN_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            lblNgaythue.Text = Ngaythue;
            lblSongaythue.Text = Songaythue;
            lbldudinh.Visible = true;
            LayDanhSachHoaDon_ThanhToan();
            LoadCombobox1();
            dtoHoaDon_ThanhToan.NgayThanhToan = DateTime.Now;
            dtbNgayThanhToan.Text = dtoHoaDon_ThanhToan.NgayThanhToan.ToString();
            txtTongTien.ReadOnly = true;
            txtSoPDK.ReadOnly = true;
            txtSoHD.ReadOnly = true;
            Gru_LKL.Enabled = false;
            if (SoPDKs != null)
            {
                txtTongTien.Text = tongtien.ToString();
                txtSoPDK.Text = SoPDKs.ToString();
                txtSoHD.Text = SoHDs.ToString();

                HoaDon_ThanhToanDTO dto = new HoaDon_ThanhToanDTO();
                HoaDon_ThanhToanBUS busHD = new HoaDon_ThanhToanBUS();
                dto.SoPDK = txtSoPDK.Text;
                if (!busHD.KTHD(dto))
                {
                    dtgBangHoaDon_ThanhToan.Enabled = false;
                    Btn_Sua.Enabled = false;
                    Btn_Xoa.Enabled = false;
                    Btn_Them.Focus();
                    Btn_Tracuu.Enabled = false;
                    txtSoHD_Search.Enabled = false;
                }
                else
                {
                    Btn_Them.Enabled = false;
                    Btn_Sua.Focus();
                }
            }
            else
            {
                Btn_Them.Enabled = false;
                Btn_Sua.Focus();
            }
        }

        public void LamMoi()
        {
            txtSoHD.Text = "";
            txtSoPDK.Text = "";
            txtTongTien.Text = "";
            lblSongaythue.Text = "0";
            lblNgaythue.Text = "0";
            dtbNgayThanhToan.Text = DateTime.Now.ToShortDateString();
            cbbMasoNV.SelectedIndex = 0;
        }

        public void DieukienMo(bool Mo)
        {
            cbbMasoNV.Enabled = Mo;
            dtbNgayThanhToan.Enabled = Mo;
            Gru_LKL.Enabled = Mo;
            Gru_TXS.Enabled = !Mo;
        }

        public void LoadCombobox1()
        {
            DataTable tbl1 = new DataTable();
            tbl1 = busNhanVien.SelectAll();
            cbbMasoNV.DisplayMember = "HoTenNV";
            cbbMasoNV.ValueMember = "MasoNV";
            cbbMasoNV.DataSource = tbl1;
        }

        public bool KiemTraSoHD(string Ma)
        {
            dtoHoaDon_ThanhToan = new HoaDon_ThanhToanDTO();
            if (Ma == dtoHoaDon_ThanhToan.SoHD)
                return true;
            return false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Opacity = this.Opacity + 0.1;
            if (this.Opacity == temp)
            {
                timer1.Enabled = false;
            }
        }

        private void Btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private int LayHoaDonThanhToanDuocChon(out ArrayList dsHoaDonThanhToan)
        {
            int iIndex = 0;
            dsHoaDonThanhToan = new ArrayList();
            foreach (DataGridViewRow dong in this.dtgBangHoaDon_ThanhToan.Rows)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    dsHoaDonThanhToan.Add(dong.DataBoundItem);
                    iIndex = dong.Index;
                }
            }

            return iIndex;
        }

        private void XoaHoaDonThanhToan()
        {
            ArrayList dsHoaDonThanhToan;
            LayHoaDonThanhToanDuocChon(out dsHoaDonThanhToan);
            if (dsHoaDonThanhToan.Count > 0)
            {
                HoaDon_ThanhToanBUS busHoaDonThanhToan = new HoaDon_ThanhToanBUS();
                busHoaDonThanhToan.Xoa(dsHoaDonThanhToan);
                XoaHoaDonThanhToanDuocChonKhoiDanhSach();
            }
            else
            {
                MessageBox.Show("Bạn phải chọn một hóa đơn thanh toán!");
                return;
            }
        }

        private void XoaHoaDonThanhToanDuocChonKhoiDanhSach()
        {
            for (int i = 0; i < dtgBangHoaDon_ThanhToan.Rows.Count; i++)
            {
                DataGridViewRow dong = dtgBangHoaDon_ThanhToan.Rows[i];
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                HoaDon_ThanhToanDTO dtoHoaDon_ThanhToanBiXoa = (HoaDon_ThanhToanDTO)dtgBangHoaDon_ThanhToan.Rows[cell.RowIndex].DataBoundItem;

                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    this.bsData.RemoveAt(cell.RowIndex);
                    i--;
                }
            }
        }

        private bool KiemTraDuLieuNhap()
        {
            if (txtSoHD.Text.Length==0 || txtSoHD.Text.Trim() == "" ||
                txtSoPDK.Text.Length==0 || txtSoPDK.Text.Trim() == "" ||
                dtbNgayThanhToan.Value==null)
            {
                MessageBox.Show("Bạn phải điền đầy đủ dữ liệu!");
                return false;
            }
            if (KiemTraSoHD(txtSoHD.Text))
            {
                MessageBox.Show("Số Hóa đơn này đã có rồi, xin hãy nhập số hóa đơn khác!");
                return false;
            }
            return true;
        }

        private void Btn_Them_Click(object sender, EventArgs e)
        {
            //Hiển thị form commit số ngày thuê
            frm = new frmTRAPHONG_Commit();
            frm.SOPHIEUDK = txtSoPDK.Text;
            frm.NGAYTHANHTOAN = dtbNgayThanhToan.Value;
            frm.NGAYTHUE = DateTime.Parse(Ngaythue);
            frm.ShowDialog();
            //------------------------

            lbldudinh.Visible = false;
            dtoHoaDon_ThanhToan = new HoaDon_ThanhToanDTO();
            bNhapDung = KiemTraDuLieuNhap();
            if (bNhapDung)
            {
                HoaDon_ThanhToanDTO dtoTT = new HoaDon_ThanhToanDTO();
                dtoTT.SoPDK = txtSoPDK.Text;
                dtoTT.TongTien = Tinhtongtien();


                dtoHoaDon_ThanhToan.SoHD = txtSoHD.Text.ToString();
                dtoHoaDon_ThanhToan.TongTien = dtoTT.TongTien;

                DateTime dt = DateTime.Parse(dtbNgayThanhToan.Value.ToShortDateString());
                dt.ToString("MM/dd/yyyy");
                dtoHoaDon_ThanhToan.NgayThanhToan = dt;

                dtoHoaDon_ThanhToan.SoPDK = txtSoPDK.Text.ToString();
                dtoHoaDon_ThanhToan.MasoNV = cbbMasoNV.SelectedValue.ToString();


                if (!busHoaDon_ThanhToan.Them(dtoHoaDon_ThanhToan))
                {
                    MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                    return;
                }
                LayDanhSachHoaDon_ThanhToan();
                PhieuDangKyDTO dto = new PhieuDangKyDTO();
                dto.SoPDK = txtSoPDK.Text.ToString();
                busPhieuDangKy.UpdatephieudangkytheoSoPDK(dto);


                txtTongTien.Text = dtoTT.TongTien.ToString();
                busHoaDon_ThanhToan.UpdateTongTien(dtoTT);
            }
            DieukienMo(false);
            Btn_Sua.Enabled = true;
            Btn_Xoa.Enabled = true;
            Btn_Them.Enabled = false;
            dtgBangHoaDon_ThanhToan.Enabled = true;
            Btn_Tracuu.Enabled = true;
            txtSoHD_Search.Enabled = true;
            LamMoi();
        }

        private void Btn_Xoa_Click(object sender, EventArgs e)
        {
            ArrayList dsHoaDon_ThanhToan;
            LayHoaDonThanhToanDuocChon(out dsHoaDon_ThanhToan);
            if (dsHoaDon_ThanhToan.Count > 0)
            {
                DialogResult kq = MessageBox.Show("Bạn có thật sự muốn xóa không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (kq == DialogResult.Yes)
                {
                    XoaHoaDonThanhToan();
                    iCo = 1;
                    LamMoi();
                }
            }
            else
            {
                MessageBox.Show("Xin hãy chọn một hóa đơn muốn xóa!");
            }

        }

        public float Tinhtongtien()
        {
            float TT;
            DataTable tbl1 = new DataTable();
            KhachHang_PhieuDangKyDTO dto = new KhachHang_PhieuDangKyDTO();
            KhachHang_PhieuDangKyBUS busKhachHang_PhieuDangKy = new KhachHang_PhieuDangKyBUS();
            dto.SoPDK = txtSoPDK.Text;
            tbl1 = busKhachHang_PhieuDangKy.SelectKhachHang_PhieuDangKytheoSoPDKtongtien(dto);
            TT = float.Parse(tbl1.Rows[0].ItemArray[0].ToString());
            return TT;
        }

        private void Btn_Sua_Click(object sender, EventArgs e)
        {
            if (txtSoHD.Text!="" && txtSoPDK.Text!="" )
            {
                ngayTT = dtbNgayThanhToan.Value;
                DieukienMo(true);
                txtSoPDK.Enabled = false;
            }
            else
            {
                MessageBox.Show("Xin hãy chọn Hóa đơn mà bạn muốn sửa thông tin!");
            }
        }

        private void Btn_Tracuu_Click(object sender, EventArgs e)
        {
            if (txtSoHD_Search.Text.Trim()=="" || txtSoHD_Search.Text.Length==0)
            {
                MessageBox.Show("Xin hãy nhập số hoá đơn để tra cứu", "Thông báo tra cứu");
                txtSoHD_Search.Focus();
                return;
            }

            HoaDon_ThanhToanBUS busTC=new HoaDon_ThanhToanBUS();
            HoaDon_ThanhToanDTO dtoTC=new HoaDon_ThanhToanDTO();
            dtoTC.SoHD=txtSoHD_Search.Text;

            ArrayList dsTraCuu = busTC.LayDanhSachHoaDon_Tracuu(dtoTC);
            XuatDanhSachHoaDon_ThanhToan(dsTraCuu);
            DieukienMo(false);
            Btn_Them.Enabled = false;
            LamMoi();
            if (dtgBangHoaDon_ThanhToan.RowCount == 0)
            {
                MessageBox.Show("Không tìm thấy thông tin hoá đơn này", "Thông báo tra cứu");
            }
        }

        private void Btn_LamMoi_Click(object sender, EventArgs e)
        {
            frmQuanly_LOAIPHONG frm = new frmQuanly_LOAIPHONG();
            frm.ShowDialog();
        }

        private void Btn_Close_Click(object sender, EventArgs e)
        {
            this.Close();
            //frmTra_PHONGs = new frmTra_PHONG();
            //this.Hide();
            //frmTra_PHONGs.Show();
            //frmTra_PHONGs.FormClosing += new FormClosingEventHandler(frmTra_PHONGs_FormClosing);
        }

        void frmTra_PHONGs_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Show();
        }

        private void Btn_Luu_Click(object sender, EventArgs e)
        {
            try
            {

                HoaDon_ThanhToanDTO dto = new HoaDon_ThanhToanDTO();
                dto.SoHD = txtSoHD.Text.ToString();
                dto.NgayThanhToan = dtbNgayThanhToan.Value;
                dto.MasoNV = cbbMasoNV.SelectedValue.ToString();

                if (!busHoaDon_ThanhToan.CapNhatThongTindondulieu(dto))
                {
                    MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                    return;
                }
                if (ngayTT != dto.NgayThanhToan)
                {
                    frm = new frmTRAPHONG_Commit();
                    frm.SOPHIEUDK = txtSoPDK.Text;
                    frm.NGAYTHANHTOAN = dtbNgayThanhToan.Value;
                    frm.NGAYTHUE = DateTime.Parse(Ngaythue);
                    frm.ShowDialog();
                }
                HoaDon_ThanhToanDTO dtoTT = new HoaDon_ThanhToanDTO();
                dtoTT.SoPDK = txtSoPDK.Text;
                dtoTT.TongTien = Tinhtongtien();
                txtTongTien.Text = dtoTT.TongTien.ToString();
                busHoaDon_ThanhToan.UpdateTongTien(dtoTT);
                LayDanhSachHoaDon_ThanhToan();

            }
            catch
            {
                MessageBox.Show("Xin hãy nhập đầy đủ thông tin");
            }
            DieukienMo(false);
            Btn_Them.Enabled = false;
            LamMoi();
            Btn_Them.Focus();
        }

        public int countSNT(DateTime NT, DateTime NTT)
        {
            return (int)((TimeSpan)(NTT - NT)).TotalDays + 1;
        }

        private void LayDanhSachHoaDon_ThanhToan()
        {
            dsHoaDon_ThanhToan = busHoaDon_ThanhToan.LayDanhSachHoaDon_ThanhToan();
            XuatDanhSachHoaDon_ThanhToan(dsHoaDon_ThanhToan);
            dtgBangHoaDon_ThanhToan.CellContentClick += new DataGridViewCellEventHandler(dtgBangHoaDon_ThanhToan_CellContentClick);
        }
        private void XuatDanhSachHoaDon_ThanhToan(ArrayList ds)
        {
            dtgBangHoaDon_ThanhToan.AutoGenerateColumns = false;

            this.bsData = new BindingSource(ds, "");
            dtgBangHoaDon_ThanhToan.DataSource = bsData;
        }

        private void Btn_Khongluu_Click(object sender, EventArgs e)
        {
            LamMoi();
            DieukienMo(false);
            Btn_Them.Enabled = false;
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            LayDanhSachHoaDon_ThanhToan();
        }

        private void btnOpentextbox_Click(object sender, EventArgs e)
        {
            //LamMoi();
            //Txt_Sophong.ReadOnly = false;
            //Txt_Sokhach.ReadOnly = false;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
            //frmTra_PHONGs = new frmTra_PHONG();
            //this.Hide();
            //frmTra_PHONGs.Show();
            //frmTra_PHONGs.FormClosing += new FormClosingEventHandler(frmTra_PHONGs_FormClosing);
        }

        private void dtgBangHoaDon_ThanhToan_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgBangHoaDon_ThanhToan.SelectedCells.Count > 0)
            {
                int row = dtgBangHoaDon_ThanhToan.SelectedCells[0].RowIndex;
                txtSoHD.Text = dtgBangHoaDon_ThanhToan.Rows[row].Cells[1].Value.ToString();
                txtTongTien.Text = dtgBangHoaDon_ThanhToan.Rows[row].Cells[2].Value.ToString();
                dtbNgayThanhToan.Text = dtgBangHoaDon_ThanhToan.Rows[row].Cells[3].Value.ToString();
                txtSoPDK.Text = dtgBangHoaDon_ThanhToan.Rows[row].Cells[4].Value.ToString();
                cbbMasoNV.SelectedValue= dtgBangHoaDon_ThanhToan.Rows[row].Cells[5].Value.ToString();

                lbldudinh.Visible = false;
                DataTable tbl = new DataTable();
                PhieuDangKyDTO dto = new PhieuDangKyDTO();
                PhieuDangKyBUS busPDK = new PhieuDangKyBUS();
                dto.SoPDK = txtSoPDK.Text;
                tbl = busPDK.SelectphieudangkytheoSoPDK(dto);
                lblNgaythue.Text = tbl.Rows[0].ItemArray[2].ToString();
                lblSongaythue.Text = tbl.Rows[0].ItemArray[3].ToString();
            }
        }

        private void btnInHD_Click(object sender, EventArgs e)
        {
            frmReport_HoaDon frm = new frmReport_HoaDon();
            frm.SoHD = txtSoHD.Text.ToString();
            frm.ShowDialog();
        }
    }
}
